/**
 * Roundcube webmail styles for the Elastic skin
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The contents are subject to the Creative Commons Attribution-ShareAlike
 * License. It is allowed to copy, distribute, transmit and to adapt the work
 * by keeping credits to the original authors in the README.md file.
 * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
 */

@import (reference) "variables";

html.dark-mode {
    scrollbar-color: @color-dark-scrollbar-thumb @color-dark-scrollbar-track;

    &:not(.touch) {
        ::-webkit-scrollbar-track {
            background-color: @color-dark-scrollbar-track;
        }

        ::-webkit-scrollbar-thumb {
            background-color: @color-dark-scrollbar-thumb;
        }
    }

    body {
        color: @color-dark-font;
        background-color: @color-dark-background;
    }

    #logo {
        // FIXME: is there a better way to make the logo darker?
        //        `mix-blend-mode: soft-light` makes it slightly too dark
        opacity: .8;
    }

    #layout-list,
    #layout-content,
    #layout-sidebar,
    #layout > div > .header,
    #layout > div > .footer,
    .popup .listbox .footer,
    .menu.pagenav.pagenav-list,
    .menu.pagenav.pagenav-list + .navlist,
    .menu.pagenav.pagenav-list.expanded + .navlist {
        background-color: transparent;
        border-color: @color-dark-border;
    }

    #layout > div > .footer {
        font-weight: normal;
    }

    #layout > div > .header,
    #layout > div > .footer {
        color: unset;

        a.button {
            color: @color-dark-font;
        }
    }

    #layout-menu {
        background: unset;
        border-right: 1px solid @color-dark-border;

        .popover-header,
        .special-buttons {
            background: transparent !important;
        }

        @media screen and (max-width: @screen-width-xs) {
            border-left: 0;

            .popover-header {
                border-bottom: 1px solid @color-dark-border;
            }
        }

        .special-buttons a:not(:focus) {
            background: @color-dark-background;
        }
    }

    &.layout-phone #layout-menu {
        background: @color-dark-popover-background;
    }

    .searchbar {
        background-color: transparent;
        border-color: @color-dark-border;

        form:before,
        a,
        input {
            color: unset;
        }

        a.selected {
            color: @color-success;
        }
    }

    #messagestack {
        div {
            color: @color-dark-font;

            i.icon:before {
                color: @color-dark-font;
            }
        }
    }

    .ui.alert.boxinformation,
    #messagestack .alert-info {
        background-color: @color-dark-message-information;
    }

    .ui.alert.boxerror,
    #messagestack .alert-danger {
        background-color: @color-dark-message-error;
    }

    .ui.alert.boxwarning,
    #messagestack .alert-warning {
        background-color: @color-dark-message-warning;
    }

    .ui.alert.boxconfirmation,
    #messagestack .alert-success {
        background-color: @color-dark-message-success;
    }

    #messagestack .loading {
        background-color: @color-dark-message-loading;
    }

    .ui.alert.boxinformation,
    .ui.alert.boxerror,
    .ui.alert.boxwarning,
    .ui.alert.boxconfirmation {
        color: @color-dark-font;
        i.icon:before {
            color: @color-dark-font;
        }
    }

    .ui.alert a:not(.btn) {
        color: @color-dark-font;
        text-decoration: underline;
    }

    .iframe-loader {
        background-color: fadeout(@color-dark-background, 10%);

        .spinner-border {
            color: darken(@color-dark-font, 25%);
            border-color: currentColor darken(@color-dark-font, 50%) currentColor currentColor;
        }
    }

    #taskmenu a,
    .menu.toolbar a {
        color: @color-dark-font;

        &.selected {
            background-color: @color-dark-list-selected-background;
        }
    }

    pre,
    .popover .menu li a[aria-haspopup]::after,
    .menu.pagenav .pagenav-text,
    .menu.pagenav a {
        color: unset;
    }

    #taskmenu {
        .action-buttons a {
            color: @color-main;
        }

        a {
            @media screen and (max-width: @screen-width-xs) {
                border-color: @color-dark-list-border !important;

                &.selected {
                    background: transparent;
                }
            }

            @media screen and (min-width: (@screen-width-xs + 1px)) and (max-width: @screen-width-medium) {
                width: @layout-menu-width-sm - 1px;
            }

            @media screen and (min-width: (@screen-width-medium + 1px)) {
                width: @layout-menu-width - 1px;
            }
        }
    }

    &.layout-small,
    &.layout-phone {
        .popover {
            border-left: 1px solid @color-dark-border;

            .menu .dropbutton a.dropdown {
                background: transparent;
            }

            &:not(.select-menu) .listing li:last-child {
                border-color: @color-dark-list-border;
            }
        }

        .popover-header {
            background: @color-dark-popover-background;
            border-bottom: 1px solid @color-dark-border;
            color: unset;
        }

        .popover-overlay {
            background: @color-dark-dialog-overlay-background;
        }
    }

    #taskmenu a:hover,
    .popupmenu .listing li > a:not(.disabled):hover,
    .header a.button.icon:not(.disabled):focus,
    .header a.button.icon:not(.disabled):hover,
    .menu.toolbar .dropbutton:not(.disabled):hover,
    .menu a:not(.disabled):focus,
    .menu a:not(.disabled):hover {
        background-color: @color-dark-list-selected-background;
    }

    .menu.toolbar a.selected {
        color: @color-success;
        background: transparent;
    }

    .menu.toolbar .dropbutton a.dropdown:hover {
        background-color: lighten(@color-dark-list-selected-background, 5%);
    }

    // ---------------------------------
    // Lists
    // ---------------------------------

    .proplist li.with-sublist > a.dropdown,
    .listing tbody td,
    .listing tbody td a,
    .listing li a {
        color: @color-dark-font;
    }

    .listing li ul,
    .listing tbody td,
    .listing li {
        border-color: @color-dark-list-border;
    }

    .listing li.selected,
    .listing li.selected > a,
    .listing li.selected > div > a, // this is used e.g. by kolab_addressbook
    .listing tr.selected td {
        color: @color-dark-list-selected;
        background-color: @color-dark-list-selected-background;
    }

    .listing li.selected ul {
        background-color: @color-dark-background;

        div.treetoggle {
            color: @color-dark-font;
        }
    }

    .listing {
        li.disabled,
        tr.disabled td {
            color: @color-dark-list-deleted;
        }
    }

    .listing li.droptarget > a,
    .listing tr.droptarget > td {
        background-color: @color-dark-list-droptarget-background;
    }

    .messagelist {
        color: @color-dark-font;

        tr:not(.flagged):not(.deleted) {
            td.subject {
                span.size,
                span.date,
                span.fromto {
                    color: @color-dark-hint;
                }

                span.msgicon.status {
                    color: @color-dark-font;
                }
            }

            span.flag {
                color: @color-dark-font;
            }

            &.selected {
                td.subject {
                    a,
                    span.msgicon.status {
                        color: @color-dark-list-selected;
                    }
                }
            }
        }

        tr.flagged:not(.deleted) {
            td,
            span.attachment span {
                color: @color-list-flagged;
            }
        }

        tr.deleted {
            td span.flag,
            td span.attachment span,
            td.subject span.msgicon.status,
            td.subject span.msgicon.status.unread:before,
            td.subject span.subject a,
            td.subject span.date,
            td.subject span.fromto {
                color: @color-dark-list-deleted;
            }
        }

        span.attachment span {
            color: @color-dark-hint;
        }
    }

    .folderlist li.mailbox .unreadcount {
        background-color: @color-dark-list-badge-background;
        color: @color-dark-list-badge;
        font-weight: normal;
    }

    .attachmentslist {
        background-color: @color-dark-list-selected-background;
        border: 0;

        a {
            color: @color-dark-font;
        }

        li {
            .attachment-name {
                color: @color-dark-font;
            }

            .attachment-size {
                color: @color-dark-hint;
            }
        }
    }
    // ---------------------------------
    // Buttons & Forms
    // ---------------------------------

    .btn {
        color: @color-dark-font;

        &:focus,
        &:hover {
            color: @color-dark-btn;
        }

        &:disabled {
            opacity: .5 !important;
        }
    }

    .btn-primary {
        background-color: @color-dark-btn-primary-background;
        color: @color-dark-btn;

        &:hover:not(:disabled) {
            background-color: lighten(@color-dark-btn-primary-background, 5%);
        }
    }

    .btn-secondary {
        background-color: @color-dark-btn-secondary-background;
        color: @color-dark-btn;

        &:hover:not(:disabled) {
            background-color: lighten(@color-dark-btn-secondary-background, 5%);
        }
    }

    .btn-danger {
        background-color: @color-dark-btn-danger-background;
        color: @color-dark-btn;

        &:hover:not(:disabled) {
            background-color: lighten(@color-dark-btn-danger-background, 5%);
        }
    }

    .floating-action-buttons a.button {
        box-shadow: none;
        background: @color-dark-main;
    }

    .custom-file-label,
    .form-control {
        background-color: @color-dark-input-background;
        color: @color-dark-input;

        &:not(.is-invalid) {
            border-color: @color-dark-input-border;
        }

        &:focus {
            background-color: @color-dark-input-background-focus;

            &:not(.is-invalid) {
                color: @color-dark-input-focus !important;
                border-color: @color-dark-input-border-focus;
            }
        }
    }

    .custom-file-label::after {
        color: @color-dark-input;
        background-color: @color-dark-input-addon-background;
    }

    .custom-select {
        @color-arrow: escape(~"@{color-dark-input}");
        background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='@{color-arrow}' viewBox='0 0 4 5'%3e%3cpath d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;
    }

    .custom-switch {
        .custom-control-label::before {
            background-color: @color-dark-checkbox;
        }

        .custom-control-label::after {
            background-color: @color-dark-font;
        }

        .custom-control-input:disabled ~ .custom-control-label {
            opacity: .4;
        }

        .custom-control-input:checked {
            & ~ .custom-control-label::before {
                background-color: @color-dark-checkbox-checked;
            }

            & ~ .custom-control-label::after {
                background-color: @color-dark-font;
            }
        }
    }

    input:disabled,
    select:disabled {
        opacity: .5;
    }

    .multi-input:not(.is-invalid) > .content {
        border-color: @color-dark-input-border;

        &.focused {
            border-color: @color-dark-input-border-focus;
        }
    }

    .input-group-text {
        color: @color-dark-input;
        background-color: @color-dark-input-addon-background;
        border-color: @color-dark-input-border;
    }

    .input-group a:focus {
        border-color: @color-dark-input-border-focus;
        box-shadow: 0 0 0 .2rem @color-input-border-focus-shadow;
        z-index: 1;
    }

    .form-control-plaintext {
        color: unset;
    }

    .recipient-input {
        &.focus {
            color: @color-dark-input-focus;
            background-color: @color-dark-input-background-focus;
            border-color: @color-dark-input-border-focus;
        }

        a.button.icon,
        input {
            color: @color-dark-input;
        }

        .recipient {
            background-color: @color-dark-input-addon-background;
            border-color: @color-dark-input-border;
        }
    }

    .file-upload {
        border-color: @color-dark-border;

        &:after {
            mix-blend-mode: soft-light;
        }

        &.droptarget {
            &.active {
                border-color: @color-dark-font;
            }

            &.hover {
                border-color: @color-dark-font;
                background-color: @color-dark-list-selected-background;
            }
        }

        .attachmentslist {
            background: transparent;
        }
    }

    .image-upload {
        background-color: @color-dark-list-selected-background;

        a.button {
            background-color: fadeout(@color-dark-background, 75%);
        }
    }

    .formcontent.raweditor {
        .CodeMirror {
            color: @color-dark-input;
            background-color: @color-dark-input-background;
            border-color: @color-dark-input-border;
        }

        .CodeMirror-focused {
            background-color: @color-dark-input-background-focus;
            border-color: @color-dark-input-border-focus;
        }
    }

    .CodeMirror-selected,
    .CodeMirror-line::selection,
    .CodeMirror-line > span::selection,
    .CodeMirror-line > span > span::selection {
        background: @color-dark-list-selected-background;
    }

    .CodeMirror-gutters {
        background-color: darken(@color-dark-list-selected-background, 10%);
        border: 0;
    }

    .CodeMirror-activeline-background {
        background: @color-dark-list-selected-background;
    }

    .skinselection .skinthumbnail {
        border-color: @color-dark-input-border;
        background: transparent;
    }

    // ---------------------------------
    // HTML Editor (TinyMCE)
    // ---------------------------------

    .html-editor {
        .editor-toolbar {
            background-color: @color-dark-input-addon-background;
            border-color: @color-dark-input-border;

            .mce-i-html {
                color: unset;

                &:hover,
                &:focus {
                    background-color: @color-dark-input-addon-background-focus;
                    border-color: transparent;
                }
            }
        }
    }

    .tox {
        &.tox-tinymce {
            border-color: @color-dark-input-border;
        }

        .tox-toolbar {
            background-color: @color-dark-input-addon-background;
            border-color: @color-dark-input-border;
        }

        .tox-toolbar-overlord > div {
            @color-overlord-border: escape(~"@{color-dark-input-border}");
            background: url("data:image/svg+xml,%3Csvg height='33px' viewBox='0 0 40 33px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='32px' width='100' height='1' fill='@{color-overlord-border}'/%3E%3C/svg%3E") @color-dark-input-addon-background;
        }

        .tox-pop.tox-pop--top {
            &:before,
            &:after {
                border-bottom-color: @color-dark-popover-border;
            }
        }

        .tox-pop__dialog {
            box-shadow: none;
            border-color: @color-dark-popover-border;
        }

        .tox-tbtn,
        .tox-split-button,
        .tox-swatches__picker-btn {
            color: @color-dark-font;

            svg {
                fill: @color-dark-font !important;
            }

            &:hover,
            &:focus {
                color: @color-dark-font;
                background: @color-dark-input-addon-background-focus;
                box-shadow: none;
            }
        }

        .tox-tbtn--enabled {
            background: @color-dark-input-addon-background-focus;
        }

        .tox-button--naked {
            &:focus:not(:disabled),
            &.tox-button--icon:hover:not(:disabled) {
                color: lighten(@color-dark-font, 5%);
                background-color: @color-dark-input-addon-background-focus;
                border-color: transparent;
            }

            &:disabled {
                background: transparent;
                border: transparent;
            }
        }

        .tox-dialog__header .tox-button--naked:hover {
            background: transparent !important;
        }

        .tox-selectfield {
            select {
                background: transparent;
                color: @color-dark-input;
            }

            svg {
                fill: @color-dark-input;
            }
        }

        .tox-color-input span::before {
            background-color: @color-dark-font;
        }

        .tox-toolbar__group:not(:last-of-type) {
            border-color: @color-dark-input-border;
        }

        .tox-dialog,
        .tox-dialog__header,
        .tox-dialog__body,
        .tox-dialog__footer,
        .tox-dialog__title {
            color: @color-dark-font;
            border-color: @color-dark-border;
            background-color: @color-dark-background;
        }

        .tox-textfield,
        .tox-color-input > input,
        .tox-label,
        .tox-dialog__body-nav-item,
        .tox-button--naked,
        .tox-dialog__header .tox-button,
        .tox-insert-table-picker__label {
            color: @color-dark-font;
        }

        .tox-dialog__footer .tox-button {
            background-color: @color-dark-btn-primary-background;
            color: @color-dark-btn;

            &:disabled {
                opacity: .5;
            }

            @media screen and (max-width: @screen-width-xs) {
                color: @color-dark-font !important;
            }

            &:focus:not(:disabled) {
                background-color: @color-dark-btn-primary-background;
            }

            &:hover:not(:disabled) {
                background-color: lighten(@color-dark-btn-primary-background, 5%);
            }

            &.tox-button--secondary {
                background-color: @color-dark-btn-secondary-background;
                color: @color-dark-btn;

                &:focus:not(:disabled) {
                    background-color: @color-dark-btn-secondary-background;
                }

                &:hover:not(:disabled) {
                    background-color: lighten(@color-dark-btn-secondary-background, 5%);
                }

            }
        }

        .tox-dialog__body-nav-item--active {
            color: @color-main;
        }

        .tox-dialog-wrap__backdrop {
            background-color: @color-dark-dialog-overlay-background;
        }

        .tox-menu {
            background-color: @color-dark-popover-background;
            border-color: @color-dark-popover-border;
            box-shadow: none;
        }

        .tox-collection__item-caret svg {
            fill: @color-dark-font;
        }

        .tox-collection__item {
            color: @color-dark-font;

            &:not(:last-child) {
                border-bottom: 1px solid @color-dark-list-border;
            }
        }

        .tox-collection--grid .tox-collection__item {
            border: 0;
        }

        .tox-collection__item--active,
        .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
            color: @color-dark-font;
            background-color: @color-dark-list-selected-background;
        }

        .tox-collection__item--enabled {
            color: @color-dark-list-selected;
            background-color: @color-dark-list-selected-background;
        }
    }

    // ---------------------------------
    // Mail preview
    // ---------------------------------

    .message-part,
    .message-htmlpart {
        border-color: @color-dark-border;

        blockquote {
            background-color: @color-dark-background;
            border-color: @color-dark-blockquote-0-border;
            color: @color-dark-blockquote-0;

            span.blockquote-link {
                color: currentColor;
                background: @color-dark-background;
                border-color: currentColor;
            }

            blockquote {
                color: @color-dark-blockquote-1;
                border-color: @color-dark-blockquote-1-border;

                blockquote {
                    color: @color-dark-blockquote-2;
                    border-color: @color-dark-blockquote-2-border;
                }
            }
        }
    }

    .message-part {
        span.sig {
            color: @color-dark-hint;
        }
    }

    .message-htmlpart {
        background-color: white;
        color: @color-font;
        padding: 0;
        margin-top: .5rem;
    }

    #message-header .header-headers .header-title {
        color: @color-dark-font;
        font-weight: normal;
    }

    .message-partheaders {
        background-color: @color-dark-list-selected-background;
        border: 0;

        table.headers-table {
            color: @color-dark-font;

            * {
                font-weight: normal;
            }
        }
    }

    // this is when image thumbnails are enabled
    p.image-attachment {
        border-color: @color-dark-border;
        background-color: @color-dark-list-selected-background;

        span {
            color: @color-dark-hint;
        }
    }

    // this is when image thumbnails are disabled
    fieldset.image-attachment {
        legend {
            color: @color-dark-hint;
            border-color: @color-dark-border;
        }
    }

    // Attachment preview
    #messagepartframe {
        background: #fff;
    }

    // ----------------------------------
    // jQuery-UI widgets' style overrides
    // ----------------------------------

    .ui-widget {
        border-color: @color-dark-border;
    }

    .ui-widget-overlay {
        background-color: @color-dark-dialog-overlay-background;
    }

    .ui-widget-header,
    .ui-widget-content {
        background-color: @color-dark-background;
    }

    .ui-dialog {
        .ui-dialog-titlebar {
            border-color: @color-dark-border;
        }

        .ui-dialog-title,
        .ui-dialog-titlebar-close {
            color: @color-dark-font;
            background: transparent;
        }

        .ui-dialog-buttonpane {
            border-color: @color-dark-border;

            .ui-dialog-buttonset {
                a.btn-link {
                    color: @color-dark-font;

                    &:focus {
                        background: transparent;
                    }
                }

                @media screen and (max-width: @screen-width-xs) {
                    button.btn-primary:not(.btn-danger),
                    button.btn-secondary {
                        color: @color-dark-font;
                    }
                }
            }
        }
    }

    .ui-datepicker {
        .ui-datepicker-header {
            border-color: @color-dark-border;
        }

        th {
            color: @color-dark-hint;
            font-size: 80%;
            font-weight: normal;
        }

        .ui-datepicker-prev,
        .ui-datepicker-next,
        .ui-state-default,
        &.ui-widget-content .ui-state-default {
            color: @color-dark-font;
        }

        .ui-state-highlight,
        &.ui-widget-content .ui-state-highlight {
            color: @color-main;
            background-color: @color-dark-list-selected-background;
        }

        .ui-datepicker-days-cell-over a {
            background-color: lighten(@color-dark-list-selected-background, 10%);
        }
    }

    .ui-menu {
        background-color: @color-dark-popover-background;
        border-color: @color-dark-popover-border;
        box-shadow: none;

        .ui-menu-item {
            border-bottom: 1px solid @color-dark-list-border;
        }

        .ui-state-active {
            background-color: @color-dark-list-selected-background !important;
        }
    }

    .minicolors-panel {
        box-shadow: none;
        border-color: @color-dark-border;
        background: @color-dark-popover-background;
    }

    // ---------------------------------
    // Other components
    // ---------------------------------

    ::placeholder,
    ::-webkit-input-placeholder, // Edge
    .listing-info,
    .listing span.secondary,
    .file-upload .hint,
    .contactlist span.email,
    #login-footer,
    #contacthead.readonly .source.row,
    .formcontent .hint {
        font-weight: normal;
        color: @color-dark-hint;
    }

    .popover {
        background-color: @color-dark-popover-background;
        border-color: @color-dark-popover-border;
        box-shadow: none;

        .menu li.separator {
            background-color: transparent;
            color: darken(@color-dark-font, 20%);
        }

        .menu ul + li.separator {
            border-top: 1px solid @color-dark-list-border;
        }
    }

    .popover-body {
        color: @color-dark-font;
    }

    .bs-popover-auto[x-placement^="right"] > .arrow::after,
    .bs-popover-right > .arrow::after {
        border-right-color: @color-dark-popover-border;
    }

    .bs-popover-auto[x-placement^="left"] > .arrow::after,
    .bs-popover-left > .arrow::after {
        border-left-color: @color-dark-popover-border;
    }

    .bs-popover-auto[x-placement^="top"] > .arrow::after,
    .bs-popover-top > .arrow::after {
        border-top-color: @color-dark-popover-border;
    }

    .bs-popover-auto[x-placement^="bottom"] > .arrow::after,
    .bs-popover-bottom > .arrow::after {
        border-bottom-color: @color-dark-popover-border;
    }

    .listing-hover-menu {
        background-color: @color-dark-popover-background;
        border-color: @color-dark-border;
        box-shadow: 0 0 5px black;

        a.button {
            color: @color-dark-font;

            &:hover {
                background: transparent;
            }
        }

        span.txt {
            color: @color-dark-hint;
        }
    }

    .nav-tabs {
        border-color: @color-dark-border;

        .nav-link {
            color: @color-dark-font;
            border-color: transparent;
            border-bottom-color: @color-dark-border;
        }

        .nav-link:hover {
            background: @color-dark-background;
            border-color: @color-dark-border;
            color: @color-dark-font;
        }

        .nav-link.active {
            background: @color-dark-background;
            border-color: @color-dark-border;
            border-bottom-color: transparent;
            color: #fff;
        }
    }

    .table {
        color: @color-dark-font;

        td,
        th,
        thead th {
            border-color: @color-dark-border;
        }
    }

    .table-widget {
        border-color: @color-dark-border;

        & > .footer {
            border-color: @color-dark-border;
        }

        // Options table is a table with first column for identifier/description
        // and other columns for a state flag. E.g. ACL table
        table.options-table {
            tr:last-child td {
                border-color: @color-dark-border;
            }

            tr.selected td {
                background-color: @color-dark-list-selected-background;
                color: @color-dark-font;
            }
        }
    }

    #rcmdraglayer {
        background-color: @color-dark-popover-background;
        border: 1px solid @color-dark-popover-border;
        box-shadow: none;
        color: @color-dark-font;
    }

    .quota-widget {
        color: unset;

        .bar {
            border-color: @color-dark-border;
            background-color: @color-dark-border;
        }
    }

    .quota-info {
        .root {
            color: @color-dark-hint;
            background-color: transparent;
        }
    }

    img.contactphoto,
    #contactpic {
        background-color: @color-dark-list-selected-background !important;
    }

    .pgpkeyimport {
        div.key.revoked,
        div.key.disabled {
            color: @color-dark-list-deleted;
        }

        li.uid::before {
            opacity: 1;
        }
    }
}
